package com.login_php.service;

import org.apache.log4j.Logger;

import com.google.common.base.Strings;
import com.login_php.actions.BaseServiceAction;
import com.login_php.domain.commons.TipoUsuario;
import com.login_php.domain.commons.Usuario;
import com.login_php.domain.user.JsonReturn;
import com.login_php.domain.user.UsuarioUpdate;
import com.login_php.manager.exception.EncriptException;
import com.login_php.manager.exception.UserAreadyExistsException;
import com.login_php.services.TipoUsuarioService;

public class UpdateUsuarioService extends BaseServiceAction{

	private static final long serialVersionUID = 8888355470982041285L;
	private static final Logger LOG = Logger.getLogger(UpdateUsuarioService.class);
	private String usuario;
	private String senha;
	private int tipoUsuario;
	private JsonReturn retorno;
	private int id;
	
	@Override
	public String doExecute() {
	
		Usuario user = getAplicationEng().getUsuarioEng().getUsuarioById(id);
		
		retorno = new JsonReturn();
		
		if(user == null){
			retorno.setSuccess(false);
			retorno.setMessage("O usuario não existe na base!");
			return SUCCESS;
		}
		
		TipoUsuario tipo = TipoUsuarioService.getTipoUsuarioById(tipoUsuario);
		
		if(tipo == null){
			retorno.setSuccess(false);
			retorno.setMessage("O Tipo de Usuario passado não é um tipo válido");
			return SUCCESS;
		}
		
		UsuarioUpdate usuarioUpdate = new UsuarioUpdate(user);
		
		usuarioUpdate.setTipoUsuario(tipoUsuario);

		if(!Strings.isNullOrEmpty(usuario) && !usuario.equalsIgnoreCase(user.getUsuario())){
			usuarioUpdate.setUserChange(true);
			usuarioUpdate.setUsuario(usuario);
		}
		
		if(!Strings.isNullOrEmpty(senha)){
			usuarioUpdate.setPasswordChange(true);
			usuarioUpdate.setSenha(senha);
		}
		
		try {
			getAplicationEng().getUsuarioEng().updateUsuarioByUsuario(usuarioUpdate);
			retorno.setSuccess(true);
			retorno.setMessage("Usuario atualizado com sucesso");
		} catch (UserAreadyExistsException e) {
			retorno.setSuccess(false);
			retorno.setMessage(e.getMessage());
		} catch (EncriptException e) {
			retorno.setSuccess(false);
			retorno.setMessage(e.getMessage());
		} catch (Exception e) {
			retorno.setSuccess(false);
			retorno.setMessage("Ocorreu um erro ao atualizar o usuario");
			LOG.error("Ocorreu um erro ao atualizar o usuario",e);
		}
		
		return SUCCESS;
	}
	
	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public JsonReturn getRetorno() {
		return retorno;
	}

	public void setRetorno(JsonReturn retorno) {
		this.retorno = retorno;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getTipoUsuario() {
		return tipoUsuario;
	}

	public void setTipoUsuario(int tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}
}
